[アップデート] AWS CodePipeline でステージ失敗時に自動再試行が出来るようになりました
いわさです。
昨日、AWS CodeBuild でビルドが失敗した際に自動で再試行させることの出来る新機能を紹介しました。
冒頭記載しておりますが、上記再試行オプションは CodePipeline で CodeBuild プロジェクトを使った場合には機能しません。
どうやら CodePipeline での使用や Webhook トリガーの場合は自動再試行が使えないみたいなのでご注意ください。CodePipeline は別で自動リトライの仕組みがあるのでどうにかなりますが、
じゃあ CodePipeline でどうしたらいいの?というところなのですが、代替となる機能が先日のアップデートで登場していたことを見落としていました。
こちらはビルドステージにかかわらず、ステージが失敗した際に再試行出来るオプションのようです。
この機能を使って CodePipeline 単体でリトライさせることが出来そうなので試してみました。
パイプライン作成時の設定
AWS CLI (API) からでもコンソールからでも設定出来ますが、V2 のみ使える機能となってます。
設定方法は以下公式ドキュメントを参考に設定しています。
と言っても設定は非常に簡単で、新規パイプラインをカスタム作成する場合だと、例えばビルドステージの構成だと次のように「Enable automatic retry on stage failure」というチェックが出来るようになっています。
これをオンにするだけです。
注意点として CodeBuild のように再試行回数を設定することは出来ません。本日時点では再試行は 1 回のみ実行されます。
既存パイプラインの場合だとステージ構成の下のほうの「Automated stage configuration」から設定が可能です。
ちなみにアップデート前に作成された V2 パイプラインの場合は自動再試行が無効状態となっていました。
なので、既存パイプラインで自動再試行を有効化させたい場合は明示的な設定が必要です。
ステージ編集から「Enable automatic retry on stage failure」を選択してあげれば OK です。
再試行させてみた
昨日使った失敗する CodeBuild プロジェクトをビルドステージに設定してみましょう。パイプラインが失敗するはずです
実行してみます。
しばらくすると、ビルドステージの 1 回目が失敗したのか「Auto retry attempt」というラベルが表示されました。再試行しているようです。
ステージが失敗で終了しました。
View retry metadata リンクから「AutomatedStageRetry」が最新の再試行トリガーとして表示されているのでうまく自動再試行されていそうです。
実行されたパイプラインのタイムラインも確認してみましょう。
良いですね。1 回だけビルドアクションが再試行されています。
Retry mode を変更してみたが...
さてこの再試行オプションですが、Retry mode というパラメータがありまして、再試行する対象を「失敗したステージ」か「失敗したアクション」かを選択することが出来るようです。
新規パイプライン作成時の有効化オプションの場合は「Retry failed stage」が自動選択されていました。
なるほど失敗したステージ全体を再試行してくれるのかなと思いきや、複数ビルドアクションを設定してみても失敗したアクションのみが実行されていました。
これは「Retry failed actions」を使った場合も同じ挙動でした。
ドキュメントによると前者の場合は失敗したステージのすべてのアクションを再試行してくれそうな表記なのですが...後日また試してみたいと思います。
さいごに
本日は AWS CodePipeline でステージ失敗時に自動再試行が出来るようになったので試してみました。
再試行回数が 1 回固定と、昨日の CodeBuild とはまたちょっと使い勝手が違うのですが、V2 の新しい機能が出ていたということで覚えておきましょう。
CodeBuild のように複数回の自動再試行をさせたい場合は EventBridge とかで拾って自作してやるのが良さそうな感じですね。